const { generateFeatureData,queryPreActions } = require("./support/utils");
const fs = require('fs');
let ejs = require('ejs');

console.log("生成测试脚本...")


const preaction_cases =[];

const init = async()=>{
  const  res = await queryPreActions();
  const pre_actions = res.data;
   // console.log("立即执行init中代码")
  pre_actions.map( one=>{
    const { scenario} = one
      if(scenario &&  scenario.cases){
        preaction_cases.push(...scenario.cases);
    }
  });

  if(preaction_cases.length > 0){
    fs.writeFileSync(__dirname+'/beforeEach.json', JSON.stringify(preaction_cases));
  }

  generateTestFiles();
}
 
// 生成测试脚本
const generateTestFiles = async()=>{
  //第一步, 先从后台接口中获取所有的 feature和scenario数据js 
generateFeatureData()
  .then(res => {
    const data = res.data;
    // console.log("data----", data);
    if(data){
      data.map( (d, idx)=>{
        const { feature,scenarios,  hasPreAction} = d;
        // console.log("scenarios---",scenarios)
        //检查文件路径是否存在
        const dir =  `./cypress/integration/auto.${idx}.${feature}`
        if(!fs.existsSync(dir)){
          fs.mkdirSync(dir)
        }
        //向测试文件中写入测试case
        const fileNmae = `${dir}/${feature}.spec.js`;
        // 把数据渲染进模板中
        // console.log("scenarios---", scenarios);
        const data = {
          feature,
          scenarios,
          hasPreAction
        }

        ejs.renderFile(__dirname + '/template.ejs', data,
        {
          // 不做转义
          escape: (scenarios) => scenarios 
        },
        function(err, fileContent){
            if(err){
              console.err('生成测试脚本中出错---', err);
            }
            fs.writeFileSync(fileNmae, fileContent);
        });      
      });
    }
  });

}



  // function getTemplate(feature,  scenarios){
  //   const scenarioStr = JSON.stringify(scenarios)
  //   return `
  //   import { queryTestData, runTestCaseByScenario } from "../../support/utils";
  //   //只需要修改feature即可
  //   const feature = '${feature}';
  //   const scenario =  ${scenarioStr};
    
  //   describe('${feature}', () => {
  //       // 查询测试数据
  //       beforeEach(() => {
  //           queryTestData(feature);
  //           cy.visit('');
            
  //       });
  //       // 根据测试数据生成测试用例
  //       runTestCaseByScenario(scenario);
  //   });
  //   `;
  // }

  init();